#include <bits/stdc++.h>
#define int long long 
using namespace std;

const int maxn = 2e2 + 10;

int n;
int arr[maxn];
int dp[maxn][maxn][10];
int score[10][10], mod[10][10];


void solve(){
	cin>>n;
	
	memset(dp, -0x3f, sizeof(dp));

	
	for(int i=1;i<=n;i++) {
		int a;
		cin>>a;
		arr[i]=arr[i+n]=a; // 区间复制延长
		dp[i][i][arr[i]] = dp[i+n][i+n][arr[i]] = 0; // 自己和自己合并不得分
	}
	
	
	
	for (int i=0;i<10;i++) {
		for (int j=0;j<10;j++) {
			score[i][j] = i*j/10;
			mod[i][j] = i*j%10;
		}
	}
	
	for (int len=2;len<=n;len++) { // 最后区间的长度范围还是不变的
		for (int i=1;i+len-1<=2*n;i++) { // 左端点
			int j=i+len-1; // 右
			for (int k=i;k<j;k++) { // 分割点
				
				// 枚举分割出来的 [i,k] [k+1,j] 的取值的所有情况
				
				// 其实这个值是固定的, 但是我们不知道, 只能直接枚举出来
				for (int w1=0;w1<10;w1++) {
					for (int w2=0;w2<10;w2++) {
						dp[i][j][mod[w1][w2]] = 
						max(dp[i][j][mod[w1][w2]], dp[i][k][w1]+dp[k+1][j][w2]+score[w1][w2]);
					}
				}
			}
//			
//			for (int w=0;w<10;w++) {
//				cout<<i<<' '<<j<<' '<<w<<' '<<dp[i][j][w]<<'\n';
//			}
		}
	}
	
	int ans=0;
	
	for (int i=1;i<=n;i++) {
		for (int w=0;w<10;w++) {
			ans=max(ans, dp[i][i+n-1][w]);
		}
	}
	
	cout << ans << '\n';
	
}

signed main(){
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	solve();
	return 0;
}
